using System;
using System.Collections.Generic;
using System.Text;
using AgilePlannerDT.Data;

namespace AgilePlannerDT.Persister
{
    /// <summary>
    /// Defines a callback inferface for AsynchronousPersister
    /// </summary>
    public interface PlannerDataChangeListener
    {
        #region Load

        void OnGotProjectNames(List<String> str);

        void OnGotProjectNamesForLoginEvent(List<String> list);
        
        void OnLoadedProject(Project project);

        #endregion

        #region Create

        void OnCreatedBacklog(Backlog backlog);

        void OnCreatedIteration(Iteration iteration,bool isCreatedByRemoteClient);

        void OnCreatedProject(Project project);

        void OnCreatedStoryCard(StoryCard storycard);

        #endregion

        #region Delete

        void OnDeletedBacklog(Backlog backlog);

        void OnDeletedIteration(Iteration iteration);        

        void OnDeletedProject(bool deleted);

        void OnDeletedStoryCard(StoryCard storycard);

        #endregion

        #region Undelete

        void OnUndeletedBacklog(Backlog backlog);
        
        void OnUndeletedIteration(Iteration iteration);

        void OnUndeletedStoryCard(StoryCard storycard);

        #endregion

        #region Move

        void OnMovedStoryCardToNewParent(StoryCard storycard);

        #endregion

        #region Update

        void OnUpdatedBacklog(Backlog backlog);

        void OnUpdatedIteration(Iteration iteration);

        void OnUpdatedLegend(Legend legend);

        void OnUpdatedProject(Project project);

        void OnUpdatedStoryCard(StoryCard storycard);

        void OnLiveUpdated(LiveUpdate update);

        void OnCardMinimized(long ID,bool isMinimized);
        
        #endregion

        #region Exception Handling

        void OnAsynchronousException(Exception exception);

        #endregion

        #region Project

        void OnArrangedProject(Project project);

        #endregion


        #region MouseMove

        void OnMouseMove(MouseMove move);


        #endregion

        #region Dot Voting

        void OnStartedVoting();
        void OnStoppedVoting();
        void OnVotedCard(VoteDot dot);
        void OnClearVotes();

        #endregion

        void OnOtherClientDisconnected(int clientID);
    }
}